---
title: Laravel 11
description: Laravel 11
---

# Laravel 11

Laravel 11 是框架发展史上非常重要的一个瘦身版本，于2024年3月12日正式发布。本文将详细介绍Laravel 11的瘦身细节和所有变化，帮助开发者更好地适应新版本。

## Laravel 11 瘦身细节

Laravel 11 对框架进行了大幅瘦身，移除了许多默认包含但不常用的功能，使框架更加轻量和灵活。以下是主要的瘦身细节：

### 1. 目录结构简化

新的Laravel 11项目目录结构相比Laravel 10减少了约69个文件，主要变化包括：

- **移除了app/Console目录**
- **移除了app/Exceptions目录**
- **移除了app/Http/Middleware目录** - 所有内置中间件移至框架内部
- **移除了app/Http/Kernel.php文件**
- **移除了routes/api.php文件**
- **移除了routes/channels.php文件**

### 2. 配置文件瘦身

- **config目录默认为空** - 只保留.gitkeep文件
- **移除了多个配置文件**，包括：
  - broadcasting.php
  - cors.php
  - sanctum.php
  - hashing.php
  - view.php
  - 等其他配置文件

### 3. 路由文件瘦身

- **routes目录只保留web.php和console.php**
- **移除了api.php和channels.php**

### 4. 中间件处理方式变更

- **移除了9个默认中间件类**，这些中间件现在由框架内部提供
- **中间件配置移至bootstrap/app.php文件**

## 如何恢复被移除的功能

虽然Laravel 11移除了许多默认功能，但大多数功能可以通过简单的命令恢复：

### 1. 恢复API路由

```bash
php artisan install:api
```

此命令会：
- 安装Laravel Sanctum包
- 创建routes/api.php文件
- 添加必要的迁移文件

### 2. 恢复广播系统

```bash
php artisan install:broadcasting
```

此命令会：
- 创建routes/channels.php文件
- 添加必要的JavaScript和配置文件

### 3. 恢复配置文件

可以使用以下命令发布任何配置文件：

```bash
# 发布单个配置文件
php artisan config:publish database
php artisan config:publish logging

# 发布所有配置文件
php artisan config:publish
```

### 4. 查看配置值

如果只想查看框架默认配置值而不发布配置文件：

```bash
php artisan config:show logging
# 或者
cat vendor/laravel/framework/config/logging.php
```

## Laravel 11 的主要变化

### 1. 新的应用引导方式

Laravel 11使用新的bootstrap/app.php文件来配置应用，这是一个更精简的配置方式：

```php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        // 中间件配置
    })
    ->withExceptions(function (Exceptions $exceptions) {
        // 异常处理配置
    })->create();
```

### 2. 中间件配置方式变更

现在可以在bootstrap/app.php文件中配置中间件：

```php
->withMiddleware(function (Middleware $middleware) {
    $middleware->web(append: \App\Http\Middleware\ExampleMiddleware::class);
})
```

### 3. 最低PHP版本要求提高

- Laravel 11 要求PHP 8.2+
- 不再支持PHP 8.1

### 4. 新的默认设置

- **Pest**成为默认测试框架
- **SQLite**成为默认数据库

### 5. 新的健康检查端点

Laravel 11默认注册了一个`/up`路由，用于健康检查，返回响应时间。

### 6. 新的Artisan命令

```bash
php artisan make:enum
php artisan make:class
php artisan make:interface
```

### 7. 模型Casts方法变更

现在使用protected方法代替protected属性：

```php
class User extends Authenticatable
{
    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }
}
```

### 8. 限制预加载记录数量

```php
$users = User::with(['posts' => function ($query) {
    $query->latest()->limit(10);
}])->get();
```

### 9. once()方法

新的记忆化函数，确保可调用函数只被调用一次：

```php
class Post extends Model
{
    public function stats(): array
    {
        return once(function () {
            // 计算统计数据
            return $stats;
        });
    }
}
```

## 总结

Laravel 11的瘦身是框架发展的重要里程碑，通过移除默认但不常用的功能，使框架更加轻量和灵活。虽然移除了许多功能，但大多数功能可以通过简单的命令恢复，这使得开发者可以根据项目需求自由选择所需功能，而不必承担不必要的开销。

这种模块化的方法使Laravel更加适应现代开发需求，同时保持了其强大的功能和灵活性。对于开发者来说，了解这些变化并适应新的开发方式是充分利用Laravel 11的关键。


